package router

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"io"
	"os"
	v1 "test/api/v1"
	"test/tools"
	"time"
)

// 初始化 Gin 框架，定义接口
func InitWeb() {
	// 定义 Gin 部署模式为线上模式
	gin.SetMode(tools.Cfg.Section("server").Key("AppMode").String())

	// 禁用控制台颜色，将日志写入文件时不需要控制台颜色。
	gin.DisableConsoleColor()

	// 将 Gin web 访问日志存储至 logs/access.log 文件
	f, _ := os.OpenFile("logs/access.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)

	// 将 Gin 日志写入至文件
	gin.DefaultWriter = io.MultiWriter(f)

	r := gin.New()

	// 自定义 Gin 日志输出格式
	r.Use(gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string {
		// 你的自定义格式
		return fmt.Sprintf("%s - [%s] \"%s %s %s %d %s \"%s\" %s\"\n",
			param.ClientIP,
			param.TimeStamp.Format(time.RFC1123),
			param.Method,
			param.Path,
			param.Request.Proto,
			param.StatusCode,
			param.Latency,
			param.Request.UserAgent(),
			param.ErrorMessage, )}))

	// 如果 Gin 中出现恐慌，将自动被恢复
	r.Use(gin.Recovery())

	// 定义一个 v1 版的接口组
	auth := r.Group("api/v1")

	// 定义帮助接口
	r.GET("/help", v1.HelpPrintFunc)

	{
		// 镜像下载接口, imagepullname Query 接口
		auth.POST("imagepull", v1.ImagePullFunc)

		// 镜像上传接口, imagepushname Query 接口
		//auth.POST("imagepush", v1.ImagePushFunc)

		// 查询镜像接口
		auth.GET("imagelist", v1.ImageListFunc)

		// 通过镜像原名返回翻墙后镜像名
		auth.GET("imagequery", v1.ImageQueryFunc)
	}

	// 运行端口 8080
	r.Run(tools.Cfg.Section("server").Key("HttpPort").String())
}
